package com.geek.javase.ch17.work.tcpwork.tcp3;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.Socket;
import java.util.Scanner;

/*
 *@Date 2025/11/4
 *@Author wangpeng
 *@Description
 * 需求3：服务端接收多条消息，服务端也可以发送多条消息；客户端可以发送多条消息，也可以接收多条消息；（一对一，阻塞的现象）
 * 对于需求3，由于这些阻塞点，可能会有空响应！其阻塞的原因，无论客户端还是服务器都是只有一个main线程在执行任务进行通信。
 * 由于程序自上而下，造成的结果就是需要客户端先写，服务器再读，读的时候释放阻塞点，然后服务器再写。客户端的阻塞点释放，读到数据。
 * 然后while循环读、写
 *
 */
public class TCPClient {
    public static void main(String[] args) {
        System.out.println("-------客户端--------");
        try(
                //创建客户端
                Socket socket = new Socket(InetAddress.getLocalHost(), 8899);
                //读消息
                BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
                //写消息
                PrintWriter pw = new PrintWriter(socket.getOutputStream());
                Scanner sc = new Scanner(System.in);
        ){
            //循环读、写
            while(true){
                //先写
                System.out.println("客户端说：");
                String str = sc.nextLine();
                pw.println(str);
                pw.flush();

                if(str.equals("exit")){
                    break;
                }
                //后读，阻塞点
                String str1 = br.readLine();
                System.out.println("客户端读：" + str1);
            }
        }catch(Exception e){
            e.printStackTrace();
        }
    }
}
